在上一天的文章中帶大家認識了客戶端預測的功用及作法,而在使用這項技術時也會遇到協調問題。
由於延遲的問題,我們收到最近一次回傳的封包可能已經是過期很久的封包,那麼如果您拿本地端電腦最新的運算結果,跟最近一次收到的封包去做結果的比對,那兩個封包一比對絕對會不相等,也因此客戶端永遠收到的都是錯誤資訊的封包,那在反覆修正的過程就會出現一些很嚴重的遊戲問題。
為了解決上述的問題,就會使用到伺服器協調的原理,就是在每個封包添加序列號,以此來避免客戶端拿過期的封包來做資料的比對。
下圖為客戶端預測運作時發生同步問題的概念圖
0ms - 假設玩家按了W,玩家電腦因為客戶端預測往前移動到了(0,0,1),並發送封包到伺服器。
50ms - 玩家此時也按了W,客戶端運算結果為(0,0,2)並往前移動到(0,0,2),同樣也發送封包到伺服器,而此時伺服器也收到了玩家第一個封包,並同時將結果(0,0,1)送回客戶端。
100ms - 玩家收到了第一個封包,比對後發現資料不同,依照客戶端預測的原則,將玩家移回(0,0,1)。
150ms - 玩家收到了第二個封包,比對後結果又不相同,因此玩家又被移回(0,0,2)。